package com.javarush.test.level19.lesson10.bonus03;

/* Знакомство с тегами
Считайте с консоли имя файла, который имеет HTML-формат
Пример:
Info about Leela <span xml:lang="en" lang="en"><b><span>Turanga Leela
</span></b></span>
Первым параметром в метод main приходит тег. Например, "span"
Вывести на консоль все теги, которые соответствуют заданному тегу
Каждый тег на новой строке, порядок должен соответствовать порядку следования в файле
Количество пробелов, \n, \r не влияют на результат
Файл не содержит тег CDATA, для всех открывающих тегов имеется отдельный закрывающий тег, одиночных тегов нету
Тег может содержать вложенные теги
Пример вывода:
<span xml:lang="en" lang="en"><b><span>Turanga Leela</span></b></span>
<span>Turanga Leela</span>

Шаблон тега:
<tag>text1</tag>
<tag text2>text1</tag>
<tag
text2>text1</tag>

text1, text2 могут быть пустыми
*/


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;

public class Solution {
    public static int mCount=1;
    public static Map<Integer,StringBuilder> result=new TreeMap<>();

    public static void main(String[] args) {

        String tag="";
        InputStreamReader in=null;
        StringBuilder sb=null;


        try {
            BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
            in = new FileReader(reader.readLine());
            tag=args[0];
            sb = new StringBuilder();

        while (in.ready()) {
            int symbol =  in.read();
            if (symbol != 13 && symbol != 10)
                sb.append((char) symbol);
        }
        in.close();

        String openTag="<"+tag;
        String closeTag="</"+tag+">";


            for (int i = 0; i < sb.length(); i++) {
                try {
                    if (sb.substring(i, i + openTag.length()).equals(openTag)) {
                        StringBuilder a = sFinder(sb, i, tag);
                        i = i + a.length() - 1;
                    }
                } catch (Exception e) {
                }
            }

            for (Map.Entry<Integer, StringBuilder> r : result.entrySet()) {
                System.out.println(r.getValue());
            }
        }catch(Exception e){}
    }

    public static StringBuilder sFinder(StringBuilder str,int pos, String tag)
    {
        StringBuilder s = new StringBuilder();
        String openTag = "<" + tag;
        String closeTag = "</" + tag + ">";
        int count=0;
        result.put(mCount++,s);
        for (int i = pos; i < str.length(); i++)
        {

            while(count<1){
                s.append(str.charAt(i));
                count++;
                i++;
            }
            s.append(str.charAt(i));
            try{
                if (str.substring(i, i + openTag.length()).equals(openTag))
                {

                 StringBuilder a=sFinder(str, i, tag);
                 s.append(a.substring(1));
                 i=i+a.length()-1;
                 continue;
                }


                String abc=s.substring(s.length()-closeTag.length(), s.length());
                if (s.substring(s.length()-closeTag.length(), s.length()).equals(closeTag))
                {

                    break;
                }
            }   catch (Exception e){}

        }

        return s;
    }
}
